pub trait Module {

}

pub trait ModuleManage {
    fn register<M>(&mut self, module: M) where M: Module;
    fn get_module<M>(&self) -> Option<&M> where M: Module;
}

#[async_trait::async_trait]
pub trait Serve<N, MQ> {
    async fn serve(&mut self, node: &N, message_queue: MQ) -> tokio::io::Result<()>;
}